package col

import (
	tableConsts "yunj/pkg/yunj/core/builder/builderconsts"
	"yunj/pkg/yunj/core/builder/table"
)

// 触发事件
type Trigger struct {
	table.Col
	EventCode  any    `json:"event_code"`  // 触发事件标识
	EventType  string `json:"event_type"`  // 触发事件类型（openTab 打开子页面、openPopup 打开弹出层页面、asyncEvent 异步事件）
	EventTitle string `json:"event_title"` // 触发事件标题
	EventUrl   string `json:"event_url"`   // 触发事件地址
}

func NewTrigger(field string, title ...string) *Trigger {
	c := &Trigger{}
	// 设置默认值
	c.Type = tableConsts.TABLE_COL_TYPE_NORMAL

	table.SetColInstance(&c.Col, c)
	c.SetColField(field)
	if len(title) > 0 {
		c.SetTitle(title[0])
	}
	return c
}

// 设置标题
func (c *Trigger) SetTitle(title string) *Trigger {
	c.Title = title
	return c
}

// 设置排列方式
func (c *Trigger) SetAlign(align string) *Trigger {
	c.Align = align
	return c
}

// 设置是否开启列的排序功能
func (c *Trigger) SetSort(yes bool) *Trigger {
	c.Sort = yes
	return c
}

// 设置固定列
func (c *Trigger) SetFixed(fixed string) *Trigger {
	c.Fixed = fixed
	return c
}

// 设置隐藏列
func (c *Trigger) SetHide(hide string) *Trigger {
	c.Hide = hide
	return c
}

// 设置权限
func (c *Trigger) SetAuth(auth string) *Trigger {
	c.Auth = auth
	return c
}

// 设置宽度
func (c *Trigger) SetWidth(width any) *Trigger {
	c.Width = width
	return c
}

// 设置最小宽度
func (c *Trigger) SetMinWidth(minWidth uint64) *Trigger {
	c.MinWidth = minWidth
	return c
}

// 设置最大宽度
func (c *Trigger) SetMaxWidth(maxWidth uint64) *Trigger {
	c.MaxWidth = maxWidth
	return c
}

// 设置触发事件标识
func (c *Trigger) SetEventCode(eventCode any) *Trigger {
	c.EventCode = eventCode
	return c
}

// 设置触发事件类型
func (c *Trigger) SetEventType(eventType string) *Trigger {
	c.EventType = eventType
	return c
}

// 设置触发事件标题
func (c *Trigger) SetEventTitle(eventTitle string) *Trigger {
	c.EventTitle = eventTitle
	return c
}

// 设置触发事件地址
// 可以配置为可执行的laytpl，如：SetEventUrl(fmt.Sprintf("`%s?role_ids=`+ d.id", util.BuildAdminUrl("/member/list")))
func (c *Trigger) SetEventUrl(eventUrl string) *Trigger {
	c.EventUrl = eventUrl
	return c
}

// 处理属性
func (c *Trigger) HandleAttr() error {
	if c.EventCode == nil {
		c.EventCode = c.Field
	}
	if c.EventType == "" {
		c.EventType = tableConsts.EVENT_OPEN_TAB
	}
	if c.EventTitle == "" {
		c.EventTitle = c.Title
	}
	return nil
}
